package com.yungee.logic;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yungee.base.entity.JsonHistory;
import com.yungee.base.service.impl.JsonHistoryServiceImpl;
import com.yungee.util.MD5Util;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Date;
import java.util.Objects;

@Service
@Slf4j
public class JsonLogic {
    @Autowired
    private JsonHistoryServiceImpl jsonHistoryService;

    /**
     * 保存json到数据库
     * @param content
     */
    @Transactional(rollbackFor = Exception.class)
    @DS("assistant")
    public void saveJson(JSONObject content) {
        String jsonString = content.toJSONString();
        String md5 = MD5Util.getMD5(jsonString);
        JsonHistory jsonHistory = jsonHistoryService.selectByMd5(md5);
        if (Objects.isNull(jsonHistory)){
            jsonHistory = new JsonHistory();
            jsonHistory.setMd5(md5);
            jsonHistory.setContent(jsonString);
            jsonHistory.setCreateTime(new Date());
            jsonHistory.setUpdateVersion(0);
            jsonHistory.setUpdateTime(new Date());
            jsonHistoryService.save(jsonHistory);
        }else {
            JsonHistory updateEntity = new JsonHistory();
            updateEntity.setId(jsonHistory.getId());
            updateEntity.setUpdateTime(new Date());
            updateEntity.setUpdateVersion(jsonHistory.getUpdateVersion()+1);
            jsonHistoryService.updateById(updateEntity);
        }
    }

    /**
     * 获取最新的json
     * @return
     */
    @Transactional(rollbackFor = Exception.class)
    @DS("assistant")
    public JSONObject getLatestChangeJson() {
        JsonHistory jsonHistory = jsonHistoryService.getLatestChangeJson();
        if (Objects.nonNull(jsonHistory)){
            return JSONObject.parseObject(jsonHistory.getContent());
        }else {
            return new JSONObject();
        }
    }

    /**
     * 查询
     */
    @DS("assistant")
    public Page<JsonHistory> page(int pageNum, int pageSize) {
        return jsonHistoryService.page(new Page<>(pageNum, pageSize));
    }
}
